package com.tedu.api.list;

import org.junit.jupiter.api.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * set接口是Collection接口的子接口
 * set接口存储数据，特点：无序，无下标，元素不可以重复
 *                     子实现类：存null，不可以存null
 * 常用方法：Set 接口的方法继承与Collection 接口
 *         add(),remove(),contains(),size()
 *         clear()
 *  迭代器：Iterator  进行遍历集合
 *  具体实现类：
 *  1.HashSet【常用】：由哈希算法是先保存数据集合
 *    特点：不保证元素顺序，不允许元素重复，可以存null值
 *         set方法与Hashset方法一致
 *  2.LinkedHashSet偶尔用：可以存null值，不允许元素重复，保证元素顺序
 *  3.TreeSet基本不用：不允许元素重复，不可以存null值，保证元素顺序
 *                    比较器对元素
 */
public class setAPI {
    @Test
    public void testSet(){
        //创建Set集合---堕胎方式
        Set<String> set=new HashSet<>();
        //add() 父类Set的方法 、| 子类 HashSet add() -- 子类重写的方法
        set.add(new String("蒸鹿尾"));
        set.add(new String("烧花鸭"));
        set.add(new String("蒸熊掌"));
        set.add(new String("烧子鹅"));
        System.out.println("Set集合打印"+set);
        //remove方法--重写Collection
        set.remove("烧雏鸡");
        System.out.println("删除Set集合元素："+set);
        boolean b=set.contains("烧鸡");
        System.out.println("判断元素是否存在Set集合中"+b);
        System.out.println("Set集合元素个数："+set.size());
        //set.clear();
        //System.out.println("是否清空set集合："+set);
        //使用Iterator 遍历for集合数据
        //1.通过Set集合 调用 iterator() 返回：Iterator实例【迭代器对象】
        Iterator<String> it=set.iterator();
        //2.遵循迭代器使用规则：问取删---删除null值
        while(it.hasNext()){  //问：集合是否有元素
            it.next();       //取：获取元素
        }   //if(str==null)
         {  //引用类型：null值
            it.remove();//删
        }
        //3.迭代器中打印元素：数据
        //System.out.println("打印Set集合："+set);
    }
}
